package com.itheima.service.store.Impl;

import com.github.pagehelper.PageHelper;
import com.itheima.domain.store.Address;
import com.itheima.domain.store.City;
import com.itheima.domain.store.Company;
import com.itheima.mapper.store.CompanyMapper;
import com.itheima.service.store.CompanyService;
import com.itheima.utils.MapperUtil;
import com.itheima.utils.UidUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @param
 * @return
 */
public class CompanyServiceImpl implements CompanyService {
    @Override
    public List<City> findAllCity() {
        //定义返回值
        List<City> list=null;
        //工具类获取执行者对象
        SqlSession session = MapperUtil.getSession();
        //获取持久层接口的代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //执行接口中的方法，查询所有的城市信息
        list=mapper.findAllCity();
        //释放资源
        MapperUtil.close(session);
        return list;
    }

    @Override
    public List<Address> findAddressById(int id) {
        //定义返回值
        List<Address> list=null;
        //工具类获取执行者对象
        SqlSession session = MapperUtil.getSession();
        //获取持久层接口的代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //执行接口中的方法，查询所有的城市信息
        list=mapper.findAddressById(id);
        //释放资源
        MapperUtil.close(session);
        return list;
    }

    @Override
    public int save(Company company) {
        //设置返回值
        int i=0;
        //因为这里的下拉框比较特殊，需要处理一下,先获取所有城市的集合
        List<City> allCity = this.findAllCity();
        for (City city : allCity) {//遍历城市集合
            if(city.getId()==Integer.parseInt(company.getCity())){//如果城市的id和下拉框中城市的选项的属性的id一致
                company.setCity(city.getName());//就把下拉框中城市的id换成城市的名字
                break;//一旦遍历到id对应城市即可结束循环，避免再次将已经赋值后的company.getCity的再次转换为Integer类型，会出类型转换异常()
            }
        }
        //在这里要使用工具类获取唯一的id，因为id不是用户输入的，而且是varchar类型又不能自增，所以保证其唯一性成了关键，中国工具类就是提供唯一的id字符串
        String uid = UidUtil.getUid();
       company.setId(uid);
        //工具类走起,获取执行者对象
        SqlSession session = MapperUtil.getSession();
        //获取接口代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //调用接口中的方法
        i= mapper.save(company);
        //释放资源
        MapperUtil.close(session);
        return i;
    }

    @Override
    public Company findCompanyById(String id) {
        //定义返回值
        Company company=null;
        //工具类获取session
        SqlSession session = MapperUtil.getSession();
        //session获取接口代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //执行接口中的方法
        company= mapper.findCompanyById(id);
        //释放资源
        MapperUtil.close(session);
        return company;
    }

    @Override
    public int update(Company company) {
        //设置返回值
        int i=0;
        //因为这里的下拉框比较特殊，需要处理一下,先获取所有城市的集合
        List<City> allCity = this.findAllCity();
     /*   for (City city : allCity) {//遍历城市集合,这里没处理好，暂停
            if(city.getId()==Integer.parseInt(company.getCity())){//如果城市的id和下拉框中城市的选项的属性的id一致
                company.setCity(city.getName());//就把下拉框中城市的id换成城市的名字
            }
        }*/
        //工具类走起,获取执行者对象
        SqlSession session = MapperUtil.getSession();
        //获取接口代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //调用接口中的方法
        i= mapper.update(company);
        //释放资源
        MapperUtil.close(session);
        return i;

    }

    @Override
    public int deleteById(String id) {
        //工具类获取session对象
        SqlSession session = MapperUtil.getSession();
        //session获取接口代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //调用方法
        int i=mapper.deleteById(id);
        //释放资源
        MapperUtil.close(session);
        return i;
    }

    @Override
    public List<Company> findByPage(int pageNum, int pageSize) {
        //定义返回值
        List<Company> list=null;
        //工具类获取执行者对象
        SqlSession session = MapperUtil.getSession();
        //获取持久层接口的代理对象
        CompanyMapper mapper = session.getMapper(CompanyMapper.class);
        //在查询所有之前先设置分页参数
        PageHelper.startPage(pageNum,pageSize);

        //执行接口中的方法
        list=mapper.findAll();
        //释放资源
        MapperUtil.close(session);
        return list;
    }
}
